﻿/***************************************************************
*       
* add by OceanHo 2015/8/28 13:34:12
*
****************************************************************/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace oceanho.webapi.factory.httpUtility
{
    /// <summary>
    /// 定义一个算法工具类（用于实现某些特定的算法的定义与实现）
    /// </summary>
    internal static class AlgorithmUtility
    {
        // 定义此程序中int类型允许的最大波菲拉契数的n值
        internal const int Int_Fibo_MAX_FOR_APP = 30;

        // 递归实现
        //internal static double GetFibonacci(int a)
        //{
        //    if (a <= 2) return 1;
        //    else return GetFibonacci(a - 1) + GetFibonacci(a - 2);
        //}

        /// <summary>
        /// 获取n的斐波那契数列值,最大返回int.MaxValue
        /// &gt;-&lt;
        /// http://www.cnblogs.com/hlxs/archive/2011/07/15/2107389.html
        /// </summary>
        /// <param name="n">N值</param>
        /// <returns></returns>
        internal static int GetFibonacci(int n)
        {
            if (n < 1)
            {
                return -1;
            }
            if (n >= Int_Fibo_MAX_FOR_APP)
            {
                return -1;
            }

            int f1 = 1, f2 = 1, f = 1;
            for (int i = 2; i < n; i++)
            {
                f = f1 + f2;
                f1 = f2;
                f2 = f;
            }
            return f >= Int_Fibo_MAX_FOR_APP ? Int_Fibo_MAX_FOR_APP : f;
        }
    }
}
